package com.m1.tzolkin.model.technos;

import java.io.Serializable;
import java.util.Collection;

import com.m1.tzolkin.model.ObservableModel;
import com.m1.tzolkin.model.exceptions.StepMoveException;
import com.m1.tzolkin.model.players.ITZPlayer;
import com.m1.tzolkin.model.technos.ITechnology.TechLevel;
import com.m1.tzolkin.model.util.zone.IStepsZonesManager;

/**
 * Un gestionnaire de technologies.
 * A tout moment, le gestionnaire peut renseigner l'ensemble des technologies
 *  dont jouit un joueur donn�e.
 *
 */
public interface ITechnologiesManager extends IStepsZonesManager<ITechnology, ITZPlayer>, ObservableModel, Serializable {

	// REQUETES
	
	/**
	 * Retourne l'ensemble des technologies du joueur p.
	 */
	Collection<TechLevel> getTechs(ITZPlayer p);
	
	// COMMANDES
	
	/**
	 * Emp�che de monter sur la derni�re marche, mais r�alise l'action � la place.
	 */
	@Override
	void up(ITechnology t, ITZPlayer p);
	
	/**
	 * L�ve une exception lorsqu'appel�e.
	 */
	@Override
	void down(ITechnology t, ITZPlayer p) throws StepMoveException;
	
}
